// utils/dateUtil.js
/**
 * 日期格式化工具函数
 * 统一使用带秒数的ISO-8601格式作为前后端交互标准
 */

import dayjs from 'dayjs';
import 'dayjs/locale/zh-cn';
import relativeTime from 'dayjs/plugin/relativeTime';

dayjs.locale('zh-cn');
dayjs.extend(relativeTime);

/**
 * 格式化日期为带秒数的ISO-8601格式和友好显示格式
 * @param {Date|string|number} date 日期对象、时间戳或日期字符串
 * @return {Object} 包含多种格式的日期对象
 */
export function formatDateTime(date) {
    if (!date) return { iso: '', display: '暂无日期', timestamp: 0 };

    try {
        const dateObj = dayjs(date);
        if (!dateObj.isValid()) {
            throw new Error('Invalid date');
        }

        // 生成带秒数的ISO-8601格式（前后端通用）
        const isoFormat = dateObj.format('YYYY-MM-DDTHH:mm:ssZ');

        // 生成带秒数的友好显示格式（中文习惯）
        const displayFormat = dateObj.format('YYYY年MM月DD日 HH:mm:ss');

        return {
            iso: isoFormat,         // 前后端交互的标准格式
            display: displayFormat, // 前端显示的友好格式
            timestamp: dateObj.valueOf(), // 时间戳格式
            dayjs: dateObj          // dayjs对象，方便进一步处理
        };
    } catch (error) {
        console.error('日期格式化错误:', error);
        return { iso: '', display: '无效日期', timestamp: 0 };
    }
}

/**
 * 解析ISO格式日期为dayjs对象（统一命名为formatDateTime）
 * @param {string} isoDate ISO格式日期字符串
 * @return {dayjs} dayjs日期对象
 */
export function formatDateTimeParse(isoDate) {
    return dayjs(isoDate);
}

/**
 * 获取相对时间描述（统一命名为formatDateTime）
 * @param {Date|string|number} date 日期对象、时间戳或日期字符串
 * @return {string} 相对时间描述
 */
export function formatDateTimeRelative(date) {
    return formatDateTime(date).dayjs.fromNow();
}

/**
 * 获取用于后端交互的标准ISO格式日期（统一命名为formatDateTime）
 * @param {Date|string|number} date 日期对象、时间戳或日期字符串
 * @return {string} ISO格式日期字符串
 */
export function formatDateTimeForBackend(date) {
    return formatDateTime(date).iso;
}

/**
 * 获取用于前端显示的友好格式日期（统一命名为formatDateTime）
 * @param {Date|string|number} date 日期对象、时间戳或日期字符串
 * @return {string} 友好显示格式日期字符串
 */
export function formatDateTimeForDisplay(date) {
    return formatDateTime(date).display;
}

/**
 * 格式化日期为指定格式（统一命名为formatDateTime）
 * @param {Date|string|number} date 日期对象、时间戳或日期字符串
 * @param {string} format 自定义格式字符串（默认为带秒的标准格式）
 * @return {string} 格式化后的日期字符串
 */
export function formatDateTimeCustom(date, format = 'YYYY-MM-DD HH:mm:ss') {
    return formatDateTime(date).dayjs.format(format);
}